{"version":3,"sources":["scrolloverflow.js"],"names":["window","document","Math","IScroll","el","options","this","wrapper","querySelector","scroller","children","scrollerStyle","style","resizeScrollbars","mouseWheelSpeed","snapThreshold","disablePointer","utils","hasPointer","disableTouch","hasTouch","disableMouse","startX","startY","scrollY","directionLockThreshold","momentum","bounce","bounceTime","bounceEasing","preventDefault","preventDefaultException","tagName","HWCompositing","useTransition","useTransform","bindToWrapper","onmousedown","i","translateZ","hasPerspective","hasTransition","hasTransform","eventPassthrough","scrollX","freeScroll","ease","circular","resizePolling","undefined","tap","test","position","shrinkScrollbars","invertWheelDirection","x","y","directionX","directionY","_events","_init","refresh","scrollTo","enable","createDefaultScrollbar","direction","interactive","type","scrollbar","createElement","indicator","cssText","className","height","width","pointerEvents","appendChild","Indicator","wrapperStyle","indicatorStyle","listenX","listenY","resize","defaultScrollbars","shrink","fade","speedRatioX","speedRatioY","sizeRatioX","sizeRatioY","maxPosX","maxPosY","addEvent","prefixPointerEvent","transform","durationProp","transitionDuration","isBadAndroid","self","rAF","opacity","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","setTimeout","_prefixStyle","_vendor","charAt","toUpperCase","substr","me","_elementStyle","vendors","l","length","getTime","Date","now","extend","target","obj","fn","capture","addEventListener","removeEvent","removeEventListener","pointerEvent","MSPointerEvent","current","start","time","lowerMargin","wrapperSize","deceleration","destination","duration","distance","speed","abs","round","_transform","PointerEvent","appVersion","navigator","safariVersion","match","parseFloat","transitionTimingFunction","transitionDelay","transformOrigin","hasClass","e","c","re","RegExp","addClass","newclass","split","push","join","removeClass","replace","offset","left","offsetLeft","top","offsetTop","offsetParent","exceptions","eventType","touchstart","touchmove","touchend","mousedown","mousemove","mouseup","pointerdown","pointermove","pointerup","MSPointerDown","MSPointerMove","MSPointerUp","quadratic","k","sqrt","back","b","elastic","f","pow","sin","PI","eventName","ev","createEvent","initEvent","pageX","pageY","dispatchEvent","click","MouseEvent","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","_constructed","prototype","version","_initEvents","scrollbars","indicators","_initIndicators","mouseWheel","_initWheel","snap","_initSnap","keyBindings","_initKeys","destroy","clearTimeout","resizeTimeout","_execEvent","_transitionEnd","isInTransition","_transitionTime","resetPosition","_start","which","enabled","initiated","pos","point","touches","moved","distX","distY","directionLocked","startTime","getComputedPosition","_translate","isAnimating","absStartX","absStartY","pointX","pointY","_move","newX","newY","absDistX","absDistY","deltaX","deltaY","timestamp","endTime","hasHorizontalScroll","hasVerticalScroll","maxScrollX","maxScrollY","_end","momentumX","momentumY","changedTouches","distanceX","distanceY","easing","flick","wrapperWidth","wrapperHeight","max","_nearestSnap","currentPage","snapSpeed","min","_resize","that","disable","offsetHeight","clientWidth","clientHeight","scrollerWidth","offsetWidth","scrollerHeight","wrapperOffset","on","off","index","indexOf","splice","apply","slice","call","arguments","scrollBy","transitionType","_transitionTimingFunction","_animate","scrollToElement","offsetX","offsetY","nodeType","transitionTime","updatePosition","remove","matrix","getComputedStyle","_indicatorsMap","interactiveScrollbars","customStyle","fadeScrollbars","concat","wheelTimeout","_wheel","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","goToPage","querySelectorAll","n","cx","cy","m","stepX","snapStepX","stepY","snapStepY","pages","snapThresholdX","snapThresholdY","posX","posY","next","prev","keys","pageUp","pageDown","end","home","up","right","down","charCodeAt","_key","prevTime","keyTime","acceleration","keyAcceleration","keyCode","destX","destY","easingFn","step","destTime","handleEvent","stopPropagation","fadeTimeout","parentNode","removeChild","lastPointX","lastPointY","_pos","display","bottom","indicatorWidth","minBoundaryX","maxBoundaryX","indicatorHeight","minBoundaryY","maxBoundaryY","ignoreBoundaries","val","hold","visible","delay","bind","module","exports","define","amd","$","ACTIVE","ACTIVE_SEL","SECTION","SECTION_SEL","SECTION_ACTIVE_SEL","SLIDE","SLIDE_SEL","SLIDE_ACTIVE_SEL","SLIDES_WRAPPER","SLIDES_WRAPPER_SEL","SCROLLABLE","SCROLLABLE_SEL","wheelOn","wheelOff","iscrollHandler","refreshId","iScrollInstances","toggleWheel","value","scrollable","find","each","iScrollInstance","data","onLeave","beforeLeave","afterLoad","create","element","scrollHeight","scrollOverflowOptions","$this","get","isScrolled","scrollTop","innerHeight","activeSection","first","unwrap","update","css","parent","wrapContent","jQuery","fp_scrolloverflow","scrollBarHandler","createScrollBarForAll","RESPONSIVE","removeResponsiveScrollOverflows","forEachSectionAndSlide","createScrollBar","fullpage","shared","afterRenderActions","contentHeight","scrollOverflowHandler","wrap","section","closest","verticalCentered","TABLE_CELL_SEL","parseInt","wrapInner","iscrollOptions","slides","AUTO_HEIGHT_RESPONSIVE","init","readyState","TABLE_CELL","hideScrollbars","isTouch","msMaxTouchPoints"],"mappings":"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","file":"scrolloverflow.min.js","sourcesContent":["/*!\n* Customized version of iScroll.js 0.0.2\n* It fixes bugs affecting its integration with fullpage.js\n*/\n/*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */\n(function (window, document, Math) {\nvar rAF = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (callback) { window.setTimeout(callback, 1000 / 60); };\n\nvar utils = (function () {\n var me = {};\n\n var _elementStyle = document.createElement('div').style;\n var _vendor = (function () {\n var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],\n transform,\n i = 0,\n l = vendors.length;\n\n for ( ; i < l; i++ ) {\n transform = vendors[i] + 'ransform';\n if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);\n }\n\n return false;\n })();\n\n function _prefixStyle (style) {\n if ( _vendor === false ) return false;\n if ( _vendor === '' ) return style;\n return _vendor + style.charAt(0).toUpperCase() + style.substr(1);\n }\n\n me.getTime = Date.now || function getTime () { return new Date().getTime(); };\n\n me.extend = function (target, obj) {\n for ( var i in obj ) {\n target[i] = obj[i];\n }\n };\n\n me.addEvent = function (el, type, fn, capture) {\n el.addEventListener(type, fn, !!capture);\n };\n\n me.removeEvent = function (el, type, fn, capture) {\n el.removeEventListener(type, fn, !!capture);\n };\n\n me.prefixPointerEvent = function (pointerEvent) {\n return window.MSPointerEvent ?\n 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):\n pointerEvent;\n };\n\n me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {\n var distance = current - start,\n speed = Math.abs(distance) / time,\n destination,\n duration;\n\n deceleration = deceleration === undefined ? 0.0006 : deceleration;\n\n destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );\n duration = speed / deceleration;\n\n if ( destination < lowerMargin ) {\n destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;\n distance = Math.abs(destination - current);\n duration = distance / speed;\n } else if ( destination > 0 ) {\n destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;\n distance = Math.abs(current) + destination;\n duration = distance / speed;\n }\n\n return {\n destination: Math.round(destination),\n duration: duration\n };\n };\n\n var _transform = _prefixStyle('transform');\n\n me.extend(me, {\n hasTransform: _transform !== false,\n hasPerspective: _prefixStyle('perspective') in _elementStyle,\n hasTouch: 'ontouchstart' in window,\n hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed\n hasTransition: _prefixStyle('transition') in _elementStyle\n });\n\n /*\n This should find all Android browsers lower than build 535.19 (both stock browser and webview)\n - galaxy S2 is ok\n - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`\n - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S3 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S4 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S5 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n - galaxy S6 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n */\n me.isBadAndroid = (function() {\n var appVersion = window.navigator.appVersion;\n // Android browser is not a chrome browser.\n if (/Android/.test(appVersion) && !(/Chrome\\/\\d/.test(appVersion))) {\n var safariVersion = appVersion.match(/Safari\\/(\\d+.\\d)/);\n if(safariVersion && typeof safariVersion === \"object\" && safariVersion.length >= 2) {\n return parseFloat(safariVersion[1]) < 535.19;\n } else {\n return true;\n }\n } else {\n return false;\n }\n })();\n\n me.extend(me.style = {}, {\n transform: _transform,\n transitionTimingFunction: _prefixStyle('transitionTimingFunction'),\n transitionDuration: _prefixStyle('transitionDuration'),\n transitionDelay: _prefixStyle('transitionDelay'),\n transformOrigin: _prefixStyle('transformOrigin')\n });\n\n me.hasClass = function (e, c) {\n var re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\");\n return re.test(e.className);\n };\n\n me.addClass = function (e, c) {\n if ( me.hasClass(e, c) ) {\n return;\n }\n\n var newclass = e.className.split(' ');\n newclass.push(c);\n e.className = newclass.join(' ');\n };\n\n me.removeClass = function (e, c) {\n if ( !me.hasClass(e, c) ) {\n return;\n }\n\n var re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\", 'g');\n e.className = e.className.replace(re, ' ');\n };\n\n me.offset = function (el) {\n var left = -el.offsetLeft,\n top = -el.offsetTop;\n\n // jshint -W084\n while (el = el.offsetParent) {\n left -= el.offsetLeft;\n top -= el.offsetTop;\n }\n // jshint +W084\n\n return {\n left: left,\n top: top\n };\n };\n\n me.preventDefaultException = function (el, exceptions) {\n for ( var i in exceptions ) {\n if ( exceptions[i].test(el[i]) ) {\n return true;\n }\n }\n\n return false;\n };\n\n me.extend(me.eventType = {}, {\n touchstart: 1,\n touchmove: 1,\n touchend: 1,\n\n mousedown: 2,\n mousemove: 2,\n mouseup: 2,\n\n pointerdown: 3,\n pointermove: 3,\n pointerup: 3,\n\n MSPointerDown: 3,\n MSPointerMove: 3,\n MSPointerUp: 3\n });\n\n me.extend(me.ease = {}, {\n quadratic: {\n style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n fn: function (k) {\n return k * ( 2 - k );\n }\n },\n circular: {\n style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly \"circular\" but this looks better, it should be (0.075, 0.82, 0.165, 1)\n fn: function (k) {\n return Math.sqrt( 1 - ( --k * k ) );\n }\n },\n back: {\n style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n fn: function (k) {\n var b = 4;\n return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;\n }\n },\n bounce: {\n style: '',\n fn: function (k) {\n if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {\n return 7.5625 * k * k;\n } else if ( k < ( 2 / 2.75 ) ) {\n return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n } else if ( k < ( 2.5 / 2.75 ) ) {\n return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n } else {\n return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n }\n }\n },\n elastic: {\n style: '',\n fn: function (k) {\n var f = 0.22,\n e = 0.4;\n\n if ( k === 0 ) { return 0; }\n if ( k == 1 ) { return 1; }\n\n return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );\n }\n }\n });\n\n me.tap = function (e, eventName) {\n var ev = document.createEvent('Event');\n ev.initEvent(eventName, true, true);\n ev.pageX = e.pageX;\n ev.pageY = e.pageY;\n e.target.dispatchEvent(ev);\n };\n\n me.click = function (e) {\n var target = e.target,\n ev;\n\n if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent\n // initMouseEvent is deprecated.\n ev = document.createEvent(window.MouseEvent ? 'MouseEvents' : 'Event');\n ev.initEvent('click', true, true);\n ev.view = e.view || window;\n ev.detail = 1;\n ev.screenX = target.screenX || 0;\n ev.screenY = target.screenY || 0;\n ev.clientX = target.clientX || 0;\n ev.clientY = target.clientY || 0;\n ev.ctrlKey = !!e.ctrlKey;\n ev.altKey = !!e.altKey;\n ev.shiftKey = !!e.shiftKey;\n ev.metaKey = !!e.metaKey;\n ev.button = 0;\n ev.relatedTarget = null;\n ev._constructed = true;\n target.dispatchEvent(ev);\n }\n };\n\n return me;\n})();\nfunction IScroll (el, options) {\n this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;\n this.scroller = this.wrapper.children[0];\n this.scrollerStyle = this.scroller.style; // cache style for better performance\n\n this.options = {\n\n resizeScrollbars: true,\n\n mouseWheelSpeed: 20,\n\n snapThreshold: 0.334,\n\n// INSERT POINT: OPTIONS\n disablePointer : !utils.hasPointer,\n disableTouch : utils.hasPointer || !utils.hasTouch,\n disableMouse : utils.hasPointer || utils.hasTouch,\n startX: 0,\n startY: 0,\n scrollY: true,\n directionLockThreshold: 5,\n momentum: true,\n\n bounce: true,\n bounceTime: 600,\n bounceEasing: '',\n\n preventDefault: true,\n preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|LABEL)$/ },\n\n HWCompositing: true,\n useTransition: true,\n useTransform: true,\n bindToWrapper: typeof window.onmousedown === \"undefined\"\n };\n\n for ( var i in options ) {\n this.options[i] = options[i];\n }\n\n // Normalize options\n this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';\n\n this.options.useTransition = utils.hasTransition && this.options.useTransition;\n this.options.useTransform = utils.hasTransform && this.options.useTransform;\n\n this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;\n this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n // If you want eventPassthrough I have to lock one of the axes\n this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;\n this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;\n\n // With eventPassthrough we also need lockDirection mechanism\n this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;\n\n this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;\n\n if ( this.options.tap === true ) {\n this.options.tap = 'tap';\n }\n\n // https://github.com/cubiq/iscroll/issues/1029\n if (!this.options.useTransition && !this.options.useTransform) {\n if(!(/relative|absolute/i).test(this.scrollerStyle.position)) {\n this.scrollerStyle.position = \"relative\";\n }\n }\n\n if ( this.options.shrinkScrollbars == 'scale' ) {\n this.options.useTransition = false;\n }\n\n this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;\n\n// INSERT POINT: NORMALIZATION\n\n // Some defaults\n this.x = 0;\n this.y = 0;\n this.directionX = 0;\n this.directionY = 0;\n this._events = {};\n\n// INSERT POINT: DEFAULTS\n\n this._init();\n this.refresh();\n\n this.scrollTo(this.options.startX, this.options.startY);\n this.enable();\n}\n\nIScroll.prototype = {\n version: '5.2.0',\n\n _init: function () {\n this._initEvents();\n\n if ( this.options.scrollbars || this.options.indicators ) {\n this._initIndicators();\n }\n\n if ( this.options.mouseWheel ) {\n this._initWheel();\n }\n\n if ( this.options.snap ) {\n this._initSnap();\n }\n\n if ( this.options.keyBindings ) {\n this._initKeys();\n }\n\n// INSERT POINT: _init\n\n },\n\n destroy: function () {\n this._initEvents(true);\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n this._execEvent('destroy');\n },\n\n _transitionEnd: function (e) {\n if ( e.target != this.scroller || !this.isInTransition ) {\n return;\n }\n\n this._transitionTime();\n if ( !this.resetPosition(this.options.bounceTime) ) {\n this.isInTransition = false;\n this._execEvent('scrollEnd');\n }\n },\n\n _start: function (e) {\n // React to left mouse button only\n if ( utils.eventType[e.type] != 1 ) {\n // for button property\n // http://unixpapa.com/js/mouse.html\n var button;\n if (!e.which) {\n /* IE case */\n button = (e.button < 2) ? 0 :\n ((e.button == 4) ? 1 : 2);\n } else {\n /* All others */\n button = e.button;\n }\n if ( button !== 0 ) {\n return;\n }\n }\n\n if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {\n return;\n }\n\n if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n e.preventDefault();\n }\n\n var point = e.touches ? e.touches[0] : e,\n pos;\n\n this.initiated = utils.eventType[e.type];\n this.moved = false;\n this.distX = 0;\n this.distY = 0;\n this.directionX = 0;\n this.directionY = 0;\n this.directionLocked = 0;\n\n this.startTime = utils.getTime();\n\n if ( this.options.useTransition && this.isInTransition ) {\n this._transitionTime();\n this.isInTransition = false;\n pos = this.getComputedPosition();\n this._translate(Math.round(pos.x), Math.round(pos.y));\n this._execEvent('scrollEnd');\n } else if ( !this.options.useTransition && this.isAnimating ) {\n this.isAnimating = false;\n this._execEvent('scrollEnd');\n }\n\n this.startX = this.x;\n this.startY = this.y;\n this.absStartX = this.x;\n this.absStartY = this.y;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this._execEvent('beforeScrollStart');\n },\n\n _move: function (e) {\n if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n return;\n }\n\n if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!\n e.preventDefault();\n }\n\n var point = e.touches ? e.touches[0] : e,\n deltaX = point.pageX - this.pointX,\n deltaY = point.pageY - this.pointY,\n timestamp = utils.getTime(),\n newX, newY,\n absDistX, absDistY;\n\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this.distX += deltaX;\n this.distY += deltaY;\n absDistX = Math.abs(this.distX);\n absDistY = Math.abs(this.distY);\n\n // We need to move at least 10 pixels for the scrolling to initiate\n if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {\n return;\n }\n\n // If you are scrolling in one direction lock the other\n if ( !this.directionLocked && !this.options.freeScroll ) {\n if ( absDistX > absDistY + this.options.directionLockThreshold ) {\n this.directionLocked = 'h'; // lock horizontally\n } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {\n this.directionLocked = 'v'; // lock vertically\n } else {\n this.directionLocked = 'n'; // no lock\n }\n }\n\n if ( this.directionLocked == 'h' ) {\n if ( this.options.eventPassthrough == 'vertical' ) {\n e.preventDefault();\n } else if ( this.options.eventPassthrough == 'horizontal' ) {\n this.initiated = false;\n return;\n }\n\n deltaY = 0;\n } else if ( this.directionLocked == 'v' ) {\n if ( this.options.eventPassthrough == 'horizontal' ) {\n e.preventDefault();\n } else if ( this.options.eventPassthrough == 'vertical' ) {\n this.initiated = false;\n return;\n }\n\n deltaX = 0;\n }\n\n deltaX = this.hasHorizontalScroll ? deltaX : 0;\n deltaY = this.hasVerticalScroll ? deltaY : 0;\n\n newX = this.x + deltaX;\n newY = this.y + deltaY;\n\n // Slow down if outside of the boundaries\n if ( newX > 0 || newX < this.maxScrollX ) {\n newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n }\n if ( newY > 0 || newY < this.maxScrollY ) {\n newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n }\n\n this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;\n this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;\n\n if ( !this.moved ) {\n this._execEvent('scrollStart');\n }\n\n this.moved = true;\n\n this._translate(newX, newY);\n\n/* REPLACE START: _move */\n\n if ( timestamp - this.startTime > 300 ) {\n this.startTime = timestamp;\n this.startX = this.x;\n this.startY = this.y;\n }\n\n/* REPLACE END: _move */\n\n },\n\n _end: function (e) {\n if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n return;\n }\n\n if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n e.preventDefault();\n }\n\n var point = e.changedTouches ? e.changedTouches[0] : e,\n momentumX,\n momentumY,\n duration = utils.getTime() - this.startTime,\n newX = Math.round(this.x),\n newY = Math.round(this.y),\n distanceX = Math.abs(newX - this.startX),\n distanceY = Math.abs(newY - this.startY),\n time = 0,\n easing = '';\n\n this.isInTransition = 0;\n this.initiated = 0;\n this.endTime = utils.getTime();\n\n // reset if we are outside of the boundaries\n if ( this.resetPosition(this.options.bounceTime) ) {\n return;\n }\n\n this.scrollTo(newX, newY); // ensures that the last position is rounded\n\n // we scrolled less than 10 pixels\n if ( !this.moved ) {\n if ( this.options.tap ) {\n utils.tap(e, this.options.tap);\n }\n\n if ( this.options.click ) {\n utils.click(e);\n }\n\n this._execEvent('scrollCancel');\n return;\n }\n\n if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {\n this._execEvent('flick');\n return;\n }\n\n // start momentum animation if needed\n if ( this.options.momentum && duration < 300 ) {\n momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };\n momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };\n newX = momentumX.destination;\n newY = momentumY.destination;\n time = Math.max(momentumX.duration, momentumY.duration);\n this.isInTransition = 1;\n }\n\n\n if ( this.options.snap ) {\n var snap = this._nearestSnap(newX, newY);\n this.currentPage = snap;\n time = this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(newX - snap.x), 1000),\n Math.min(Math.abs(newY - snap.y), 1000)\n ), 300);\n newX = snap.x;\n newY = snap.y;\n\n this.directionX = 0;\n this.directionY = 0;\n easing = this.options.bounceEasing;\n }\n\n// INSERT POINT: _end\n\n if ( newX != this.x || newY != this.y ) {\n // change easing function when scroller goes out of the boundaries\n if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {\n easing = utils.ease.quadratic;\n }\n\n this.scrollTo(newX, newY, time, easing);\n return;\n }\n\n this._execEvent('scrollEnd');\n },\n\n _resize: function () {\n var that = this;\n\n clearTimeout(this.resizeTimeout);\n\n this.resizeTimeout = setTimeout(function () {\n that.refresh();\n }, this.options.resizePolling);\n },\n\n resetPosition: function (time) {\n var x = this.x,\n y = this.y;\n\n time = time || 0;\n\n if ( !this.hasHorizontalScroll || this.x > 0 ) {\n x = 0;\n } else if ( this.x < this.maxScrollX ) {\n x = this.maxScrollX;\n }\n\n if ( !this.hasVerticalScroll || this.y > 0 ) {\n y = 0;\n } else if ( this.y < this.maxScrollY ) {\n y = this.maxScrollY;\n }\n\n if ( x == this.x && y == this.y ) {\n return false;\n }\n\n this.scrollTo(x, y, time, this.options.bounceEasing);\n\n return true;\n },\n\n disable: function () {\n this.enabled = false;\n },\n\n enable: function () {\n this.enabled = true;\n },\n\n refresh: function () {\n var rf = this.wrapper.offsetHeight; // Force reflow\n\n this.wrapperWidth = this.wrapper.clientWidth;\n this.wrapperHeight = this.wrapper.clientHeight;\n\n/* REPLACE START: refresh */\n\n this.scrollerWidth = this.scroller.offsetWidth;\n this.scrollerHeight = this.scroller.offsetHeight;\n\n this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n\n/* REPLACE END: refresh */\n\n this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\n if ( !this.hasHorizontalScroll ) {\n this.maxScrollX = 0;\n this.scrollerWidth = this.wrapperWidth;\n }\n\n if ( !this.hasVerticalScroll ) {\n this.maxScrollY = 0;\n this.scrollerHeight = this.wrapperHeight;\n }\n\n this.endTime = 0;\n this.directionX = 0;\n this.directionY = 0;\n\n this.wrapperOffset = utils.offset(this.wrapper);\n\n this._execEvent('refresh');\n\n this.resetPosition();\n\n// INSERT POINT: _refresh\n\n },\n\n on: function (type, fn) {\n if ( !this._events[type] ) {\n this._events[type] = [];\n }\n\n this._events[type].push(fn);\n },\n\n off: function (type, fn) {\n if ( !this._events[type] ) {\n return;\n }\n\n var index = this._events[type].indexOf(fn);\n\n if ( index > -1 ) {\n this._events[type].splice(index, 1);\n }\n },\n\n _execEvent: function (type) {\n if ( !this._events[type] ) {\n return;\n }\n\n var i = 0,\n l = this._events[type].length;\n\n if ( !l ) {\n return;\n }\n\n for ( ; i < l; i++ ) {\n this._events[type][i].apply(this, [].slice.call(arguments, 1));\n }\n },\n\n scrollBy: function (x, y, time, easing) {\n x = this.x + x;\n y = this.y + y;\n time = time || 0;\n\n this.scrollTo(x, y, time, easing);\n },\n\n scrollTo: function (x, y, time, easing) {\n easing = easing || utils.ease.circular;\n\n this.isInTransition = this.options.useTransition && time > 0;\n var transitionType = this.options.useTransition && easing.style;\n if ( !time || transitionType ) {\n if(transitionType) {\n this._transitionTimingFunction(easing.style);\n this._transitionTime(time);\n }\n this._translate(x, y);\n } else {\n this._animate(x, y, time, easing.fn);\n }\n },\n\n scrollToElement: function (el, time, offsetX, offsetY, easing) {\n el = el.nodeType ? el : this.scroller.querySelector(el);\n\n if ( !el ) {\n return;\n }\n\n var pos = utils.offset(el);\n\n pos.left -= this.wrapperOffset.left;\n pos.top -= this.wrapperOffset.top;\n\n // if offsetX/Y are true we center the element to the screen\n if ( offsetX === true ) {\n offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n }\n if ( offsetY === true ) {\n offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n }\n\n pos.left -= offsetX || 0;\n pos.top -= offsetY || 0;\n\n pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;\n\n this.scrollTo(pos.left, pos.top, time, easing);\n },\n\n _transitionTime: function (time) {\n if (!this.options.useTransition) {\n return;\n }\n time = time || 0;\n var durationProp = utils.style.transitionDuration;\n if(!durationProp) {\n return;\n }\n\n this.scrollerStyle[durationProp] = time + 'ms';\n\n if ( !time && utils.isBadAndroid ) {\n this.scrollerStyle[durationProp] = '0.0001ms';\n // remove 0.0001ms\n var self = this;\n rAF(function() {\n if(self.scrollerStyle[durationProp] === '0.0001ms') {\n self.scrollerStyle[durationProp] = '0s';\n }\n });\n }\n\n\n if ( this.indicators ) {\n for ( var i = this.indicators.length; i--; ) {\n this.indicators[i].transitionTime(time);\n }\n }\n\n\n// INSERT POINT: _transitionTime\n\n },\n\n _transitionTimingFunction: function (easing) {\n this.scrollerStyle[utils.style.transitionTimingFunction] = easing;\n\n\n if ( this.indicators ) {\n for ( var i = this.indicators.length; i--; ) {\n this.indicators[i].transitionTimingFunction(easing);\n }\n }\n\n\n// INSERT POINT: _transitionTimingFunction\n\n },\n\n _translate: function (x, y) {\n if ( this.options.useTransform ) {\n\n/* REPLACE START: _translate */\n\n this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;\n\n/* REPLACE END: _translate */\n\n } else {\n x = Math.round(x);\n y = Math.round(y);\n this.scrollerStyle.left = x + 'px';\n this.scrollerStyle.top = y + 'px';\n }\n\n this.x = x;\n this.y = y;\n\n\n if ( this.indicators ) {\n for ( var i = this.indicators.length; i--; ) {\n this.indicators[i].updatePosition();\n }\n }\n\n\n// INSERT POINT: _translate\n\n },\n\n _initEvents: function (remove) {\n var eventType = remove ? utils.removeEvent : utils.addEvent,\n target = this.options.bindToWrapper ? this.wrapper : window;\n\n eventType(window, 'orientationchange', this);\n eventType(window, 'resize', this);\n\n if ( this.options.click ) {\n eventType(this.wrapper, 'click', this, true);\n }\n\n if ( !this.options.disableMouse ) {\n eventType(this.wrapper, 'mousedown', this);\n eventType(target, 'mousemove', this);\n eventType(target, 'mousecancel', this);\n eventType(target, 'mouseup', this);\n }\n\n if ( utils.hasPointer && !this.options.disablePointer ) {\n eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);\n eventType(target, utils.prefixPointerEvent('pointermove'), this);\n eventType(target, utils.prefixPointerEvent('pointercancel'), this);\n eventType(target, utils.prefixPointerEvent('pointerup'), this);\n }\n\n if ( utils.hasTouch && !this.options.disableTouch ) {\n eventType(this.wrapper, 'touchstart', this);\n eventType(target, 'touchmove', this);\n eventType(target, 'touchcancel', this);\n eventType(target, 'touchend', this);\n }\n\n eventType(this.scroller, 'transitionend', this);\n eventType(this.scroller, 'webkitTransitionEnd', this);\n eventType(this.scroller, 'oTransitionEnd', this);\n eventType(this.scroller, 'MSTransitionEnd', this);\n },\n\n getComputedPosition: function () {\n var matrix = window.getComputedStyle(this.scroller, null),\n x, y;\n\n if ( this.options.useTransform ) {\n matrix = matrix[utils.style.transform].split(')')[0].split(', ');\n x = +(matrix[12] || matrix[4]);\n y = +(matrix[13] || matrix[5]);\n } else {\n x = +matrix.left.replace(/[^-\\d.]/g, '');\n y = +matrix.top.replace(/[^-\\d.]/g, '');\n }\n\n return { x: x, y: y };\n },\n _initIndicators: function () {\n var interactive = this.options.interactiveScrollbars,\n customStyle = typeof this.options.scrollbars != 'string',\n indicators = [],\n indicator;\n\n var that = this;\n\n this.indicators = [];\n\n if ( this.options.scrollbars ) {\n // Vertical scrollbar\n if ( this.options.scrollY ) {\n indicator = {\n el: createDefaultScrollbar('v', interactive, this.options.scrollbars),\n interactive: interactive,\n defaultScrollbars: true,\n customStyle: customStyle,\n resize: this.options.resizeScrollbars,\n shrink: this.options.shrinkScrollbars,\n fade: this.options.fadeScrollbars,\n listenX: false\n };\n\n this.wrapper.appendChild(indicator.el);\n indicators.push(indicator);\n }\n\n // Horizontal scrollbar\n if ( this.options.scrollX ) {\n indicator = {\n el: createDefaultScrollbar('h', interactive, this.options.scrollbars),\n interactive: interactive,\n defaultScrollbars: true,\n customStyle: customStyle,\n resize: this.options.resizeScrollbars,\n shrink: this.options.shrinkScrollbars,\n fade: this.options.fadeScrollbars,\n listenY: false\n };\n\n this.wrapper.appendChild(indicator.el);\n indicators.push(indicator);\n }\n }\n\n if ( this.options.indicators ) {\n // TODO: check concat compatibility\n indicators = indicators.concat(this.options.indicators);\n }\n\n for ( var i = indicators.length; i--; ) {\n this.indicators.push( new Indicator(this, indicators[i]) );\n }\n\n // TODO: check if we can use array.map (wide compatibility and performance issues)\n function _indicatorsMap (fn) {\n if (that.indicators) {\n for ( var i = that.indicators.length; i--; ) {\n fn.call(that.indicators[i]);\n }\n }\n }\n\n if ( this.options.fadeScrollbars ) {\n this.on('scrollEnd', function () {\n _indicatorsMap(function () {\n this.fade();\n });\n });\n\n this.on('scrollCancel', function () {\n _indicatorsMap(function () {\n this.fade();\n });\n });\n\n this.on('scrollStart', function () {\n _indicatorsMap(function () {\n this.fade(1);\n });\n });\n\n this.on('beforeScrollStart', function () {\n _indicatorsMap(function () {\n this.fade(1, true);\n });\n });\n }\n\n\n this.on('refresh', function () {\n _indicatorsMap(function () {\n this.refresh();\n });\n });\n\n this.on('destroy', function () {\n _indicatorsMap(function () {\n this.destroy();\n });\n\n delete this.indicators;\n });\n },\n\n _initWheel: function () {\n utils.addEvent(this.wrapper, 'wheel', this);\n utils.addEvent(this.wrapper, 'mousewheel', this);\n utils.addEvent(this.wrapper, 'DOMMouseScroll', this);\n\n this.on('destroy', function () {\n clearTimeout(this.wheelTimeout);\n this.wheelTimeout = null;\n utils.removeEvent(this.wrapper, 'wheel', this);\n utils.removeEvent(this.wrapper, 'mousewheel', this);\n utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);\n });\n },\n\n _wheel: function (e) {\n if ( !this.enabled ) {\n return;\n }\n\n var wheelDeltaX, wheelDeltaY,\n newX, newY,\n that = this;\n\n if ( this.wheelTimeout === undefined ) {\n that._execEvent('scrollStart');\n }\n\n // Execute the scrollEnd event after 400ms the wheel stopped scrolling\n clearTimeout(this.wheelTimeout);\n this.wheelTimeout = setTimeout(function () {\n if(!that.options.snap) {\n that._execEvent('scrollEnd');\n }\n that.wheelTimeout = undefined;\n }, 400);\n\n if ( 'deltaX' in e ) {\n if (e.deltaMode === 1) {\n wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;\n wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;\n } else {\n wheelDeltaX = -e.deltaX;\n wheelDeltaY = -e.deltaY;\n }\n } else if ( 'wheelDeltaX' in e ) {\n wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;\n wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;\n } else if ( 'wheelDelta' in e ) {\n wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;\n } else if ( 'detail' in e ) {\n wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;\n } else {\n return;\n }\n\n wheelDeltaX *= this.options.invertWheelDirection;\n wheelDeltaY *= this.options.invertWheelDirection;\n\n if ( !this.hasVerticalScroll ) {\n wheelDeltaX = wheelDeltaY;\n wheelDeltaY = 0;\n }\n\n if ( this.options.snap ) {\n newX = this.currentPage.pageX;\n newY = this.currentPage.pageY;\n\n if ( wheelDeltaX > 0 ) {\n newX--;\n } else if ( wheelDeltaX < 0 ) {\n newX++;\n }\n\n if ( wheelDeltaY > 0 ) {\n newY--;\n } else if ( wheelDeltaY < 0 ) {\n newY++;\n }\n\n this.goToPage(newX, newY);\n\n return;\n }\n\n newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n if ( newX > 0 ) {\n newX = 0;\n } else if ( newX < this.maxScrollX ) {\n newX = this.maxScrollX;\n }\n\n if ( newY > 0 ) {\n newY = 0;\n } else if ( newY < this.maxScrollY ) {\n newY = this.maxScrollY;\n }\n\n this.scrollTo(newX, newY, 0);\n\n// INSERT POINT: _wheel\n },\n\n _initSnap: function () {\n this.currentPage = {};\n\n if ( typeof this.options.snap == 'string' ) {\n this.options.snap = this.scroller.querySelectorAll(this.options.snap);\n }\n\n this.on('refresh', function () {\n var i = 0, l,\n m = 0, n,\n cx, cy,\n x = 0, y,\n stepX = this.options.snapStepX || this.wrapperWidth,\n stepY = this.options.snapStepY || this.wrapperHeight,\n el;\n\n this.pages = [];\n\n if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {\n return;\n }\n\n if ( this.options.snap === true ) {\n cx = Math.round( stepX / 2 );\n cy = Math.round( stepY / 2 );\n\n while ( x > -this.scrollerWidth ) {\n this.pages[i] = [];\n l = 0;\n y = 0;\n\n while ( y > -this.scrollerHeight ) {\n this.pages[i][l] = {\n x: Math.max(x, this.maxScrollX),\n y: Math.max(y, this.maxScrollY),\n width: stepX,\n height: stepY,\n cx: x - cx,\n cy: y - cy\n };\n\n y -= stepY;\n l++;\n }\n\n x -= stepX;\n i++;\n }\n } else {\n el = this.options.snap;\n l = el.length;\n n = -1;\n\n for ( ; i < l; i++ ) {\n if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {\n m = 0;\n n++;\n }\n\n if ( !this.pages[m] ) {\n this.pages[m] = [];\n }\n\n x = Math.max(-el[i].offsetLeft, this.maxScrollX);\n y = Math.max(-el[i].offsetTop, this.maxScrollY);\n cx = x - Math.round(el[i].offsetWidth / 2);\n cy = y - Math.round(el[i].offsetHeight / 2);\n\n this.pages[m][n] = {\n x: x,\n y: y,\n width: el[i].offsetWidth,\n height: el[i].offsetHeight,\n cx: cx,\n cy: cy\n };\n\n if ( x > this.maxScrollX ) {\n m++;\n }\n }\n }\n\n this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);\n\n // Update snap threshold if needed\n if ( this.options.snapThreshold % 1 === 0 ) {\n this.snapThresholdX = this.options.snapThreshold;\n this.snapThresholdY = this.options.snapThreshold;\n } else {\n this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);\n this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);\n }\n });\n\n this.on('flick', function () {\n var time = this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(this.x - this.startX), 1000),\n Math.min(Math.abs(this.y - this.startY), 1000)\n ), 300);\n\n this.goToPage(\n this.currentPage.pageX + this.directionX,\n this.currentPage.pageY + this.directionY,\n time\n );\n });\n },\n\n _nearestSnap: function (x, y) {\n if ( !this.pages.length ) {\n return { x: 0, y: 0, pageX: 0, pageY: 0 };\n }\n\n var i = 0,\n l = this.pages.length,\n m = 0;\n\n // Check if we exceeded the snap threshold\n if ( Math.abs(x - this.absStartX) < this.snapThresholdX &&\n Math.abs(y - this.absStartY) < this.snapThresholdY ) {\n return this.currentPage;\n }\n\n if ( x > 0 ) {\n x = 0;\n } else if ( x < this.maxScrollX ) {\n x = this.maxScrollX;\n }\n\n if ( y > 0 ) {\n y = 0;\n } else if ( y < this.maxScrollY ) {\n y = this.maxScrollY;\n }\n\n for ( ; i < l; i++ ) {\n if ( x >= this.pages[i][0].cx ) {\n x = this.pages[i][0].x;\n break;\n }\n }\n\n l = this.pages[i].length;\n\n for ( ; m < l; m++ ) {\n if ( y >= this.pages[0][m].cy ) {\n y = this.pages[0][m].y;\n break;\n }\n }\n\n if ( i == this.currentPage.pageX ) {\n i += this.directionX;\n\n if ( i < 0 ) {\n i = 0;\n } else if ( i >= this.pages.length ) {\n i = this.pages.length - 1;\n }\n\n x = this.pages[i][0].x;\n }\n\n if ( m == this.currentPage.pageY ) {\n m += this.directionY;\n\n if ( m < 0 ) {\n m = 0;\n } else if ( m >= this.pages[0].length ) {\n m = this.pages[0].length - 1;\n }\n\n y = this.pages[0][m].y;\n }\n\n return {\n x: x,\n y: y,\n pageX: i,\n pageY: m\n };\n },\n\n goToPage: function (x, y, time, easing) {\n easing = easing || this.options.bounceEasing;\n\n if ( x >= this.pages.length ) {\n x = this.pages.length - 1;\n } else if ( x < 0 ) {\n x = 0;\n }\n\n if ( y >= this.pages[x].length ) {\n y = this.pages[x].length - 1;\n } else if ( y < 0 ) {\n y = 0;\n }\n\n var posX = this.pages[x][y].x,\n posY = this.pages[x][y].y;\n\n time = time === undefined ? this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(posX - this.x), 1000),\n Math.min(Math.abs(posY - this.y), 1000)\n ), 300) : time;\n\n this.currentPage = {\n x: posX,\n y: posY,\n pageX: x,\n pageY: y\n };\n\n this.scrollTo(posX, posY, time, easing);\n },\n\n next: function (time, easing) {\n var x = this.currentPage.pageX,\n y = this.currentPage.pageY;\n\n x++;\n\n if ( x >= this.pages.length && this.hasVerticalScroll ) {\n x = 0;\n y++;\n }\n\n this.goToPage(x, y, time, easing);\n },\n\n prev: function (time, easing) {\n var x = this.currentPage.pageX,\n y = this.currentPage.pageY;\n\n x--;\n\n if ( x < 0 && this.hasVerticalScroll ) {\n x = 0;\n y--;\n }\n\n this.goToPage(x, y, time, easing);\n },\n\n _initKeys: function (e) {\n // default key bindings\n var keys = {\n pageUp: 33,\n pageDown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40\n };\n var i;\n\n // if you give me characters I give you keycode\n if ( typeof this.options.keyBindings == 'object' ) {\n for ( i in this.options.keyBindings ) {\n if ( typeof this.options.keyBindings[i] == 'string' ) {\n this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);\n }\n }\n } else {\n this.options.keyBindings = {};\n }\n\n for ( i in keys ) {\n this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];\n }\n\n utils.addEvent(window, 'keydown', this);\n\n this.on('destroy', function () {\n utils.removeEvent(window, 'keydown', this);\n });\n },\n\n _key: function (e) {\n if ( !this.enabled ) {\n return;\n }\n\n var snap = this.options.snap, // we are using this alot, better to cache it\n newX = snap ? this.currentPage.pageX : this.x,\n newY = snap ? this.currentPage.pageY : this.y,\n now = utils.getTime(),\n prevTime = this.keyTime || 0,\n acceleration = 0.250,\n pos;\n\n if ( this.options.useTransition && this.isInTransition ) {\n pos = this.getComputedPosition();\n\n this._translate(Math.round(pos.x), Math.round(pos.y));\n this.isInTransition = false;\n }\n\n this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;\n\n switch ( e.keyCode ) {\n case this.options.keyBindings.pageUp:\n if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n newX += snap ? 1 : this.wrapperWidth;\n } else {\n newY += snap ? 1 : this.wrapperHeight;\n }\n break;\n case this.options.keyBindings.pageDown:\n if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n newX -= snap ? 1 : this.wrapperWidth;\n } else {\n newY -= snap ? 1 : this.wrapperHeight;\n }\n break;\n case this.options.keyBindings.end:\n newX = snap ? this.pages.length-1 : this.maxScrollX;\n newY = snap ? this.pages[0].length-1 : this.maxScrollY;\n break;\n case this.options.keyBindings.home:\n newX = 0;\n newY = 0;\n break;\n case this.options.keyBindings.left:\n newX += snap ? -1 : 5 + this.keyAcceleration>>0;\n break;\n case this.options.keyBindings.up:\n newY += snap ? 1 : 5 + this.keyAcceleration>>0;\n break;\n case this.options.keyBindings.right:\n newX -= snap ? -1 : 5 + this.keyAcceleration>>0;\n break;\n case this.options.keyBindings.down:\n newY -= snap ? 1 : 5 + this.keyAcceleration>>0;\n break;\n default:\n return;\n }\n\n if ( snap ) {\n this.goToPage(newX, newY);\n return;\n }\n\n if ( newX > 0 ) {\n newX = 0;\n this.keyAcceleration = 0;\n } else if ( newX < this.maxScrollX ) {\n newX = this.maxScrollX;\n this.keyAcceleration = 0;\n }\n\n if ( newY > 0 ) {\n newY = 0;\n this.keyAcceleration = 0;\n } else if ( newY < this.maxScrollY ) {\n newY = this.maxScrollY;\n this.keyAcceleration = 0;\n }\n\n this.scrollTo(newX, newY, 0);\n\n this.keyTime = now;\n },\n\n _animate: function (destX, destY, duration, easingFn) {\n var that = this,\n startX = this.x,\n startY = this.y,\n startTime = utils.getTime(),\n destTime = startTime + duration;\n\n function step () {\n var now = utils.getTime(),\n newX, newY,\n easing;\n\n if ( now >= destTime ) {\n that.isAnimating = false;\n that._translate(destX, destY);\n\n if ( !that.resetPosition(that.options.bounceTime) ) {\n that._execEvent('scrollEnd');\n }\n\n return;\n }\n\n now = ( now - startTime ) / duration;\n easing = easingFn(now);\n newX = ( destX - startX ) * easing + startX;\n newY = ( destY - startY ) * easing + startY;\n that._translate(newX, newY);\n\n if ( that.isAnimating ) {\n rAF(step);\n }\n }\n\n this.isAnimating = true;\n step();\n },\n handleEvent: function (e) {\n switch ( e.type ) {\n case 'touchstart':\n case 'pointerdown':\n case 'MSPointerDown':\n case 'mousedown':\n this._start(e);\n break;\n case 'touchmove':\n case 'pointermove':\n case 'MSPointerMove':\n case 'mousemove':\n this._move(e);\n break;\n case 'touchend':\n case 'pointerup':\n case 'MSPointerUp':\n case 'mouseup':\n case 'touchcancel':\n case 'pointercancel':\n case 'MSPointerCancel':\n case 'mousecancel':\n this._end(e);\n break;\n case 'orientationchange':\n case 'resize':\n this._resize();\n break;\n case 'transitionend':\n case 'webkitTransitionEnd':\n case 'oTransitionEnd':\n case 'MSTransitionEnd':\n this._transitionEnd(e);\n break;\n case 'wheel':\n case 'DOMMouseScroll':\n case 'mousewheel':\n this._wheel(e);\n break;\n case 'keydown':\n this._key(e);\n break;\n case 'click':\n if ( this.enabled && !e._constructed ) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n }\n }\n};\nfunction createDefaultScrollbar (direction, interactive, type) {\n var scrollbar = document.createElement('div'),\n indicator = document.createElement('div');\n\n if ( type === true ) {\n scrollbar.style.cssText = 'position:absolute;z-index:9999';\n indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';\n }\n\n indicator.className = 'iScrollIndicator';\n\n if ( direction == 'h' ) {\n if ( type === true ) {\n scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n indicator.style.height = '100%';\n }\n scrollbar.className = 'iScrollHorizontalScrollbar';\n } else {\n if ( type === true ) {\n scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n indicator.style.width = '100%';\n }\n scrollbar.className = 'iScrollVerticalScrollbar';\n }\n\n scrollbar.style.cssText += ';overflow:hidden';\n\n if ( !interactive ) {\n scrollbar.style.pointerEvents = 'none';\n }\n\n scrollbar.appendChild(indicator);\n\n return scrollbar;\n}\n\nfunction Indicator (scroller, options) {\n this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n this.wrapperStyle = this.wrapper.style;\n this.indicator = this.wrapper.children[0];\n this.indicatorStyle = this.indicator.style;\n this.scroller = scroller;\n\n this.options = {\n listenX: true,\n listenY: true,\n interactive: false,\n resize: true,\n defaultScrollbars: false,\n shrink: false,\n fade: false,\n speedRatioX: 0,\n speedRatioY: 0\n };\n\n for ( var i in options ) {\n this.options[i] = options[i];\n }\n\n this.sizeRatioX = 1;\n this.sizeRatioY = 1;\n this.maxPosX = 0;\n this.maxPosY = 0;\n\n if ( this.options.interactive ) {\n if ( !this.options.disableTouch ) {\n utils.addEvent(this.indicator, 'touchstart', this);\n utils.addEvent(window, 'touchend', this);\n }\n if ( !this.options.disablePointer ) {\n utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);\n }\n if ( !this.options.disableMouse ) {\n utils.addEvent(this.indicator, 'mousedown', this);\n utils.addEvent(window, 'mouseup', this);\n }\n }\n\n if ( this.options.fade ) {\n this.wrapperStyle[utils.style.transform] = this.scroller.translateZ;\n var durationProp = utils.style.transitionDuration;\n if(!durationProp) {\n return;\n }\n this.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';\n // remove 0.0001ms\n var self = this;\n if(utils.isBadAndroid) {\n rAF(function() {\n if(self.wrapperStyle[durationProp] === '0.0001ms') {\n self.wrapperStyle[durationProp] = '0s';\n }\n });\n }\n this.wrapperStyle.opacity = '0';\n }\n}\n\nIndicator.prototype = {\n handleEvent: function (e) {\n switch ( e.type ) {\n case 'touchstart':\n case 'pointerdown':\n case 'MSPointerDown':\n case 'mousedown':\n this._start(e);\n break;\n case 'touchmove':\n case 'pointermove':\n case 'MSPointerMove':\n case 'mousemove':\n this._move(e);\n break;\n case 'touchend':\n case 'pointerup':\n case 'MSPointerUp':\n case 'mouseup':\n case 'touchcancel':\n case 'pointercancel':\n case 'MSPointerCancel':\n case 'mousecancel':\n this._end(e);\n break;\n }\n },\n\n destroy: function () {\n if ( this.options.fadeScrollbars ) {\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = null;\n }\n if ( this.options.interactive ) {\n utils.removeEvent(this.indicator, 'touchstart', this);\n utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n utils.removeEvent(this.indicator, 'mousedown', this);\n\n utils.removeEvent(window, 'touchmove', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n utils.removeEvent(window, 'mousemove', this);\n\n utils.removeEvent(window, 'touchend', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);\n utils.removeEvent(window, 'mouseup', this);\n }\n\n if ( this.options.defaultScrollbars ) {\n this.wrapper.parentNode.removeChild(this.wrapper);\n }\n },\n\n _start: function (e) {\n var point = e.touches ? e.touches[0] : e;\n\n e.preventDefault();\n e.stopPropagation();\n\n this.transitionTime();\n\n this.initiated = true;\n this.moved = false;\n this.lastPointX = point.pageX;\n this.lastPointY = point.pageY;\n\n this.startTime = utils.getTime();\n\n if ( !this.options.disableTouch ) {\n utils.addEvent(window, 'touchmove', this);\n }\n if ( !this.options.disablePointer ) {\n utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);\n }\n if ( !this.options.disableMouse ) {\n utils.addEvent(window, 'mousemove', this);\n }\n\n this.scroller._execEvent('beforeScrollStart');\n },\n\n _move: function (e) {\n var point = e.touches ? e.touches[0] : e,\n deltaX, deltaY,\n newX, newY,\n timestamp = utils.getTime();\n\n if ( !this.moved ) {\n this.scroller._execEvent('scrollStart');\n }\n\n this.moved = true;\n\n deltaX = point.pageX - this.lastPointX;\n this.lastPointX = point.pageX;\n\n deltaY = point.pageY - this.lastPointY;\n this.lastPointY = point.pageY;\n\n newX = this.x + deltaX;\n newY = this.y + deltaY;\n\n this._pos(newX, newY);\n\n// INSERT POINT: indicator._move\n\n e.preventDefault();\n e.stopPropagation();\n },\n\n _end: function (e) {\n if ( !this.initiated ) {\n return;\n }\n\n this.initiated = false;\n\n e.preventDefault();\n e.stopPropagation();\n\n utils.removeEvent(window, 'touchmove', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n utils.removeEvent(window, 'mousemove', this);\n\n if ( this.scroller.options.snap ) {\n var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n var time = this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(this.scroller.x - snap.x), 1000),\n Math.min(Math.abs(this.scroller.y - snap.y), 1000)\n ), 300);\n\n if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {\n this.scroller.directionX = 0;\n this.scroller.directionY = 0;\n this.scroller.currentPage = snap;\n this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);\n }\n }\n\n if ( this.moved ) {\n this.scroller._execEvent('scrollEnd');\n }\n },\n\n transitionTime: function (time) {\n time = time || 0;\n var durationProp = utils.style.transitionDuration;\n if(!durationProp) {\n return;\n }\n\n this.indicatorStyle[durationProp] = time + 'ms';\n\n if ( !time && utils.isBadAndroid ) {\n this.indicatorStyle[durationProp] = '0.0001ms';\n // remove 0.0001ms\n var self = this;\n rAF(function() {\n if(self.indicatorStyle[durationProp] === '0.0001ms') {\n self.indicatorStyle[durationProp] = '0s';\n }\n });\n }\n },\n\n transitionTimingFunction: function (easing) {\n this.indicatorStyle[utils.style.transitionTimingFunction] = easing;\n },\n\n refresh: function () {\n this.transitionTime();\n\n if ( this.options.listenX && !this.options.listenY ) {\n this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n } else if ( this.options.listenY && !this.options.listenX ) {\n this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n } else {\n this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n }\n\n if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {\n utils.addClass(this.wrapper, 'iScrollBothScrollbars');\n utils.removeClass(this.wrapper, 'iScrollLoneScrollbar');\n\n if ( this.options.defaultScrollbars && this.options.customStyle ) {\n if ( this.options.listenX ) {\n this.wrapper.style.right = '8px';\n } else {\n this.wrapper.style.bottom = '8px';\n }\n }\n } else {\n utils.removeClass(this.wrapper, 'iScrollBothScrollbars');\n utils.addClass(this.wrapper, 'iScrollLoneScrollbar');\n\n if ( this.options.defaultScrollbars && this.options.customStyle ) {\n if ( this.options.listenX ) {\n this.wrapper.style.right = '2px';\n } else {\n this.wrapper.style.bottom = '2px';\n }\n }\n }\n\n var r = this.wrapper.offsetHeight; // force refresh\n\n if ( this.options.listenX ) {\n this.wrapperWidth = this.wrapper.clientWidth;\n if ( this.options.resize ) {\n this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n this.indicatorStyle.width = this.indicatorWidth + 'px';\n } else {\n this.indicatorWidth = this.indicator.clientWidth;\n }\n\n this.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n if ( this.options.shrink == 'clip' ) {\n this.minBoundaryX = -this.indicatorWidth + 8;\n this.maxBoundaryX = this.wrapperWidth - 8;\n } else {\n this.minBoundaryX = 0;\n this.maxBoundaryX = this.maxPosX;\n }\n\n this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n }\n\n if ( this.options.listenY ) {\n this.wrapperHeight = this.wrapper.clientHeight;\n if ( this.options.resize ) {\n this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n this.indicatorStyle.height = this.indicatorHeight + 'px';\n } else {\n this.indicatorHeight = this.indicator.clientHeight;\n }\n\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n if ( this.options.shrink == 'clip' ) {\n this.minBoundaryY = -this.indicatorHeight + 8;\n this.maxBoundaryY = this.wrapperHeight - 8;\n } else {\n this.minBoundaryY = 0;\n this.maxBoundaryY = this.maxPosY;\n }\n\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\n this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n }\n\n this.updatePosition();\n },\n\n updatePosition: function () {\n var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n if ( !this.options.ignoreBoundaries ) {\n if ( x < this.minBoundaryX ) {\n if ( this.options.shrink == 'scale' ) {\n this.width = Math.max(this.indicatorWidth + x, 8);\n this.indicatorStyle.width = this.width + 'px';\n }\n x = this.minBoundaryX;\n } else if ( x > this.maxBoundaryX ) {\n if ( this.options.shrink == 'scale' ) {\n this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n this.indicatorStyle.width = this.width + 'px';\n x = this.maxPosX + this.indicatorWidth - this.width;\n } else {\n x = this.maxBoundaryX;\n }\n } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {\n this.width = this.indicatorWidth;\n this.indicatorStyle.width = this.width + 'px';\n }\n\n if ( y < this.minBoundaryY ) {\n if ( this.options.shrink == 'scale' ) {\n this.height = Math.max(this.indicatorHeight + y * 3, 8);\n this.indicatorStyle.height = this.height + 'px';\n }\n y = this.minBoundaryY;\n } else if ( y > this.maxBoundaryY ) {\n if ( this.options.shrink == 'scale' ) {\n this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n this.indicatorStyle.height = this.height + 'px';\n y = this.maxPosY + this.indicatorHeight - this.height;\n } else {\n y = this.maxBoundaryY;\n }\n } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {\n this.height = this.indicatorHeight;\n this.indicatorStyle.height = this.height + 'px';\n }\n }\n\n this.x = x;\n this.y = y;\n\n if ( this.scroller.options.useTransform ) {\n this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;\n } else {\n this.indicatorStyle.left = x + 'px';\n this.indicatorStyle.top = y + 'px';\n }\n },\n\n _pos: function (x, y) {\n if ( x < 0 ) {\n x = 0;\n } else if ( x > this.maxPosX ) {\n x = this.maxPosX;\n }\n\n if ( y < 0 ) {\n y = 0;\n } else if ( y > this.maxPosY ) {\n y = this.maxPosY;\n }\n\n x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;\n y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;\n\n this.scroller.scrollTo(x, y);\n },\n\n fade: function (val, hold) {\n if ( hold && !this.visible ) {\n return;\n }\n\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = null;\n\n var time = val ? 250 : 500,\n delay = val ? 0 : 300;\n\n val = val ? '1' : '0';\n\n this.wrapperStyle[utils.style.transitionDuration] = time + 'ms';\n\n this.fadeTimeout = setTimeout((function (val) {\n this.wrapperStyle.opacity = val;\n this.visible = +val;\n }).bind(this, val), delay);\n }\n};\n\nIScroll.utils = utils;\n\nif ( typeof module != 'undefined' && module.exports ) {\n module.exports = IScroll;\n} else if ( typeof define == 'function' && define.amd ) {\n define( function () { return IScroll; } );\n} else {\n window.IScroll = IScroll;\n}\n\n})(window, document, Math);\n\n/*!\n * fullPage ScrollOverflow\n * https://github.com/alvarotrigo/fullPage.js\n * @license MIT licensed\n *\n * Copyright (C) 2015 alvarotrigo.com - A project by Alvaro Trigo\n */\n(function(window, $) {\n var ACTIVE = 'active';\n var ACTIVE_SEL = '.' + ACTIVE;\n\n var SECTION = 'fp-section';\n var SECTION_SEL = '.' + SECTION;\n var SECTION_ACTIVE_SEL = SECTION_SEL + ACTIVE_SEL;\n\n var SLIDE = 'fp-slide';\n var SLIDE_SEL = '.' + SLIDE;\n var SLIDE_ACTIVE_SEL = SLIDE_SEL + ACTIVE_SEL;\n var SLIDES_WRAPPER = 'fp-slides';\n var SLIDES_WRAPPER_SEL = '.' + SLIDES_WRAPPER;\n\n // scrolloverflow\n var SCROLLABLE = 'fp-scrollable';\n var SCROLLABLE_SEL = '.' + SCROLLABLE;\n\n if(typeof IScroll !== 'undefined'){\n /*\n * Turns iScroll `mousewheel` option off dynamically\n * https://github.com/cubiq/iscroll/issues/1036\n */\n IScroll.prototype.wheelOn = function () {\n this.wrapper.addEventListener('wheel', this);\n this.wrapper.addEventListener('mousewheel', this);\n this.wrapper.addEventListener('DOMMouseScroll', this);\n };\n\n /*\n * Turns iScroll `mousewheel` option on dynamically\n * https://github.com/cubiq/iscroll/issues/1036\n */\n IScroll.prototype.wheelOff = function () {\n this.wrapper.removeEventListener('wheel', this);\n this.wrapper.removeEventListener('mousewheel', this);\n this.wrapper.removeEventListener('DOMMouseScroll', this);\n };\n }\n\n /**\n * An object to handle overflow scrolling.\n * This uses jquery.slimScroll to accomplish overflow scrolling.\n * It is possible to pass in an alternate scrollOverflowHandler\n * to the fullpage.js option that implements the same functions\n * as this handler.\n *\n * @type {Object}\n */\n window.iscrollHandler = {\n refreshId: null,\n iScrollInstances: [],\n\n // Enables or disables the mouse wheel for the active section or all slides in it\n toggleWheel: function(value){\n var scrollable = $(SECTION_ACTIVE_SEL).find(SCROLLABLE_SEL);\n scrollable.each(function(){\n var iScrollInstance = $(this).data('iscrollInstance');\n if(typeof iScrollInstance !== 'undefined' && iScrollInstance){\n if(value){\n iScrollInstance.wheelOn();\n }\n else{\n iScrollInstance.wheelOff();\n }\n }\n });\n },\n\n /**\n * Turns off iScroll for the destination section.\n * When scrolling very fast on some trackpads (and Apple laptops) the inertial scrolling would\n * scroll the destination section/slide before the sections animations ends.\n */\n onLeave: function(){\n iscrollHandler.toggleWheel(false);\n },\n\n // Turns off iScroll for the leaving section\n beforeLeave: function(){\n iscrollHandler.onLeave()\n },\n\n // Turns on iScroll on section load\n afterLoad: function(){\n iscrollHandler.toggleWheel(true);\n },\n\n /**\n * Called when overflow scrolling is needed for a section.\n *\n * @param {Object} element jQuery object containing current section\n * @param {Number} scrollHeight Current window height in pixels\n */\n create: function(element, scrollHeight, scrollOverflowOptions) {\n var scrollable = element.find(SCROLLABLE_SEL);\n\n scrollable.height(scrollHeight);\n scrollable.each(function() {\n var $this = $(this);\n var iScrollInstance = $this.data('iscrollInstance');\n if (iScrollInstance) {\n $.each(iscrollHandler.iScrollInstances, function(){\n $(this).destroy();\n });\n }\n\n iScrollInstance = new IScroll($this.get(0), scrollOverflowOptions);\n\n iScrollInstance.on('scrollEnd', function() {\n this['fp_isAtTop'] = this.y > -30;\n this['fp_isAtEnd'] = this.y - this.maxScrollY < 30;\n });\n\n iscrollHandler.iScrollInstances.push(iScrollInstance);\n\n //off by default until the section gets active\n iScrollInstance.wheelOff();\n\n $this.data('iscrollInstance', iScrollInstance);\n });\n },\n\n /**\n * Return a boolean depending on whether the scrollable element is a\n * the end or at the start of the scrolling depending on the given type.\n *\n * @param {String} type Either 'top' or 'bottom'\n * @param {Object} scrollable jQuery object for the scrollable element\n * @return {Boolean}\n */\n isScrolled: function(type, scrollable) {\n var scroller = scrollable.data('iscrollInstance');\n\n //no scroller?\n if (!scroller) {\n return true;\n }\n\n if (type === 'top') {\n return scroller.y >= 0 && !scrollable.scrollTop();\n } else if (type === 'bottom') {\n return (0 - scroller.y) + scrollable.scrollTop() + 1 + scrollable.innerHeight() >= scrollable[0].scrollHeight;\n }\n },\n\n /**\n * Returns the scrollable element for the given section.\n * If there are landscape slides, will only return a scrollable element\n * if it is in the active slide.\n *\n * @param {Object} activeSection jQuery object containing current section\n * @return {Boolean}\n */\n scrollable: function(activeSection){\n // if there are landscape slides, we check if the scrolling bar is in the current one or not\n if (activeSection.find(SLIDES_WRAPPER_SEL).length) {\n return activeSection.find(SLIDE_ACTIVE_SEL).find(SCROLLABLE_SEL);\n }\n return activeSection.find(SCROLLABLE_SEL);\n },\n\n /**\n * Returns the scroll height of the wrapped content.\n * If this is larger than the window height minus section padding,\n * overflow scrolling is needed.\n *\n * @param {Object} element jQuery object containing current section\n * @return {Number}\n */\n scrollHeight: function(element) {\n return element.find(SCROLLABLE_SEL).children().first().get(0).scrollHeight;\n },\n\n /**\n * Called when overflow scrolling is no longer needed for a section.\n *\n * @param {Object} element jQuery object containing current section\n */\n remove: function(element) {\n var scrollable = element.find(SCROLLABLE_SEL);\n if (scrollable.length) {\n var iScrollInstance = scrollable.data('iscrollInstance');\n if(iScrollInstance){\n iScrollInstance.destroy();\n }\n\n scrollable.data('iscrollInstance', null);\n }\n element.find(SCROLLABLE_SEL).children().first().children().first().unwrap().unwrap();\n },\n\n /**\n * Called when overflow scrolling has already been setup but the\n * window height has potentially changed.\n *\n * @param {Object} element jQuery object containing current section\n * @param {Number} scrollHeight Current window height in pixels\n */\n update: function(element, scrollHeight) {\n //using a timeout in order to execute the refresh function only once when `update` is called multiple times in a\n //short period of time.\n //it also comes on handy because iScroll requires the use of timeout when using `refresh`.\n clearTimeout(iscrollHandler.refreshId);\n iscrollHandler.refreshId = setTimeout(function(){\n $.each(iscrollHandler.iScrollInstances, function(){\n $(this).get(0).refresh();\n });\n }, 150);\n\n //updating the wrappers height\n element.find(SCROLLABLE_SEL).css('height', scrollHeight + 'px').parent().css('height', scrollHeight + 'px');\n },\n\n /**\n * Called to get any additional elements needed to wrap the section\n * content in order to facilitate overflow scrolling.\n *\n * @return {String|Object} Can be a string containing HTML,\n * a DOM element, or jQuery object.\n */\n wrapContent: function() {\n return '